package org.acb.sgp.dao.impl;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.acb.sgp.beans.Presupuesto;
import org.acb.sgp.dao.PresupuestoDao;
import org.acb.sgp.factory.ConnectionFactory;

public class PresupuestoDaoImpl implements PresupuestoDao {

    private Connection con;
    private CallableStatement cs;
    private ResultSet rs;

    private Connection getConnection() throws SQLException {
        return ConnectionFactory.getInstance().getConnection();
    }

    @Override
    public void registrarPresupuesto(Presupuesto presupuesto) {
        try {
            String sql = "{Call RegistrarPresupuesto(?,?,?)}";
            con = getConnection();
            cs = con.prepareCall(sql);
            cs.setInt(1, presupuesto.getEpisodio().getCodEpisodio());
            cs.setInt(2, presupuesto.getPrograma().getCodPrograma());
            cs.setInt(3, presupuesto.getEstado().getCodEstado());
            cs.execute();
        } catch (SQLException ex) {
            Logger.getLogger(PresupuestoDaoImpl.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            ConnectionFactory.closing(rs, cs, con);
        }
    }

    @Override
    public void eliminarPresupuesto(Presupuesto presupuesto) {

    }

    @Override
    public Presupuesto buscarPresupuestoPorEpisodio(Integer codEpisodio) {
        Presupuesto presupuesto = null;
        try {
            String sql = "{Call BuscarPresupuestoPorEpisodio(?)}";
            con = getConnection();
            cs = con.prepareCall(sql);
            cs.setInt(1, codEpisodio);
            rs = cs.executeQuery();
            if (rs.next()) {
                presupuesto = llenar(rs);
            }
        } catch (SQLException ex) {
            Logger.getLogger(PresupuestoDaoImpl.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            ConnectionFactory.closing(rs, cs, con);
        }
        return presupuesto;
    }

    private Presupuesto llenar(ResultSet rs) throws SQLException {
        Presupuesto presupuesto = new Presupuesto();
        presupuesto.getEpisodio().setCodEpisodio(rs.getInt("codEpisodio"));
        presupuesto.getPrograma().setCodPrograma(rs.getInt("codPrograma"));
        presupuesto.setFecRegistro(rs.getTimestamp("fecRegistro"));
        presupuesto.getEstado().setCodEstado(rs.getInt("codEstado"));
        return presupuesto;
    }

}
